package JavaGrammar;

/**
 * @author wys
 * created in 21:34 2019/2/28
 * PolymorphismTest
 * 多态
 */


public class PolymorphismTest {
    public static void main(String[] args) {
        show(new Catabs());             // 以 Cat 对象调用 show 方法
        show(new Dogabs());             // 以 Dog 对象调用 show 方法

        Animalabs a = new Catabs();     // 向上转型             父类引用
        a.eat();                        // 调用的是 Cat 的 eat
        Catabs c = (Catabs) a;          // 向下转型             父类引用转 为子类对象引用
        c.work();                       // 调用的是 Cat 的 work
    }

    public static void show(Animalabs a) {
        a.eat();
        // 类型判断
        if (a instanceof Catabs) {      // 猫做的事情
            Catabs c = (Catabs) a;
            c.work();
        } else if (a instanceof Dogabs) { // 狗做的事情
            Dogabs c = (Dogabs) a;
            c.work();
        }
    }
}

abstract class Animalabs {
    abstract void eat();
}

class Catabs extends Animalabs {
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }

    public void work() {
        System.out.println("抓老鼠");
    }
}

class Dogabs extends Animalabs {
    @Override
    public void eat() {
        System.out.println("吃骨头");
    }

    public void work() {
        System.out.println("看家");
    }
}